gdk: Add gdk_event_set_coords() method
authorCarlos Garnacho <carlosg@gnome.org>
Fri, 31 Mar 2017 14:51:42 +0000 (16:51 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 25 May 2017 14:25:58 +0000 (16:25 +0200)
A helper function basically for gtk+, so coordinates can be translated
in place depending on the widget it's being delivered to.

gdk/gdkevents.c
gdk/gdkevents.h

index cc6cb5e358b602d1ae4a92b28fbadfd517f7cee1..ca72b9c75e3e68ff76242bc8657b7d4ba1b09a74 100644 (file)
@@ -1198,6 +1198,59 @@ gdk_event_get_root_coords (const GdkEvent *event,
   return fetched;
 }
 
+void
+gdk_event_set_coords (GdkEvent *event,
+                      gdouble   x,
+                      gdouble   y)
+{
+  g_return_if_fail (event != NULL);
+
+  switch (event->type)
+    {
+    case GDK_CONFIGURE:
+      event->configure.x = x;
+      event->configure.y = y;
+      break;
+    case GDK_ENTER_NOTIFY:
+    case GDK_LEAVE_NOTIFY:
+      event->crossing.x = x;
+      event->crossing.y = y;
+      break;
+    case GDK_SCROLL:
+      event->scroll.x = x;
+      event->scroll.y = y;
+      break;
+    case GDK_BUTTON_PRESS:
+    case GDK_2BUTTON_PRESS:
+    case GDK_3BUTTON_PRESS:
+    case GDK_BUTTON_RELEASE:
+      event->button.x = x;
+      event->button.y = y;
+      break;
+    case GDK_TOUCH_BEGIN:
+    case GDK_TOUCH_UPDATE:
+    case GDK_TOUCH_END:
+    case GDK_TOUCH_CANCEL:
+      event->touch.x = x;
+      event->touch.y = y;
+      break;
+    case GDK_MOTION_NOTIFY:
+      event->motion.x = x;
+      event->motion.y = y;
+      break;
+    case GDK_TOUCHPAD_SWIPE:
+      event->touchpad_swipe.x = x;
+      event->touchpad_swipe.y = y;
+      break;
+    case GDK_TOUCHPAD_PINCH:
+      event->touchpad_pinch.x = x;
+      event->touchpad_pinch.y = y;
+      break;
+    default:
+      break;
+    }
+}
+
 /**
  * gdk_event_get_button:
  * @event: a #GdkEvent
index e7ebcc2eeb16908ddc5c5d21b41d8a6d7a8efae7..8ff961377765692c657f52afc5b3884110c761eb 100644 (file)
@@ -1461,6 +1461,10 @@ GDK_AVAILABLE_IN_ALL
 gboolean  gdk_event_get_coords         (const GdkEvent  *event,
                                         gdouble         *x_win,
                                         gdouble         *y_win);
+GDK_AVAILABLE_IN_3_90
+void      gdk_event_set_coords          (GdkEvent *event,
+                                         gdouble   x,
+                                         gdouble   y);
 GDK_AVAILABLE_IN_ALL
 gboolean  gdk_event_get_root_coords    (const GdkEvent *event,
                                         gdouble        *x_root,